Skip to main content

第 4 章:在容器裡使用 GPU

建立 GPU 環境

# echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist.conf
# dracut /boot/initramfs-$(uname -r).img $(uname -r) --force
# systemctl disable gdm
# reboot
# chmod 777 cuda_9.1.85_387.26_linux.run
# ./cuda_9.1.85_387.26_linux.run
# systemctl enable gdm
# reboot
  • 安裝完成 CUDA,開發工具之後使用 nvidia-smi 指令確認是否安裝成功
  • 需要安裝 nvidia-docker
curl -s -L https://nvidia.github.io/nvidia-docker/centos7/x86_64/nvidia-docker.repo | \
sudo tee /etc/yum.repos.d/nvidia-docker.repo
yum install -y nvidia-docker

之後會使用 nvidia-docker 指令來操作 Docker,因為它有把 CUDA 的 library 連結進去

  • 啟動 nvidia-docker service
systemctl start nvidia-docker
systemctl enable nvidia-docker

以上就把需要在 Docker 上使用 GPU Resource 的環境準備好了

使用 Tensorflow 的 Docker Image 執行矩陣相乘運算

  • 啟動 Docker Container
nvidia-docker run -it tensorflow/tensorflow:latest-gpu /bin/bash
  • 進入 container 輸入 python 指令,然後執行矩陣相乘的運算
  • 這邊主要是要執行一個 2 * 2 矩陣乘上 2 * 2 的矩陣

撰寫一個簡單的 CUDA 程式,並且在 Docker Container 上執行

  • 啟動 Docker Container
nvidia-docker run -it nvidia/cuda /bin/bash
  • 進入 Container 之後需要安裝 vim 編輯器
apt-get update
apt-get install -y vim
  • 撰寫 CUDA 程式
vi sum.c
#include "stdio.h"

__global__ void add(int a, int b, int *c){
*c = a + b;
}

int main(void){
int c;
int *dev_c;
cudaMalloc((void)&dev_c, sizeof(int));
add<<<1,1>>>(2, 7, dev_c);
cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);
printf("2 + 7 = %d\n", c);
cudaFree(dev_c);
return 0;
}
  • 將程式編譯以及執行
nvcc sum.cu -o sum.o
./sum.o